package org.cfx.gift.exception.azzert;

import cn.hutool.core.util.StrUtil;
import org.cfx.gift.exception.BusinessException;
import org.cfx.gift.exception.code.ResponseCode;

import java.util.Collection;

/**
 * 断言工具类
 * 如果断言某个对象为空,那么如果这个对象不为空就要抛异常
 * 如果断言某个对象不为空,那么如果这个对象为空就要抛异常
 * @author hp
 */
public class RonghuaAssert {

    /**
     * lang3包中StringUtils的isBlank() isEmpty()的区别是什么??
     * isEmpty() 如果字符串为"       ",isEmpty()方法认为这不是一个空字符串
     * isBlank() 不仅要判断字符串是否为空,或长度是否为0,而且还要判断字符串中每一个字符串是否是" ",所以如果是"    ",
     * 认为这是一个空字符串
     */
    // 断言字符串为空
    public static void isBlank(String str,String message){
        // 当字符串不为空的时候要抛异常
        if(StrUtil.isNotBlank(str)){
            throw new BusinessException(message);
        }
    }

    // 断言字符串不为空
    public static void isNotBlank(String str,String message){
        // 当字符串为空的时候要抛异常
        if(StrUtil.isBlank(str)){
            throw new BusinessException(message);
        }
    }

    // 断言对象为空
    public static void isNull(Object obj,String message){
        // 当对象不为空的时候要抛异常
        if(obj != null){
            throw new BusinessException(message);
        }
    }

    // 断言对象不为空
    public static void isNotNull(Object obj,String message){
        // 当对象为空的时候要抛异常
        if(obj == null){
            throw new BusinessException(message);
        }
    }

    // 断言集合为空
    public static void isNull(Collection coll, String message){
        // 当集合不为空的时候要抛异常
        if(coll != null && coll.size() > 0){
            throw new BusinessException(message);
        }
    }

    // 断言集合不为空
    public static void isNotNull(Collection coll, String message){
        // 当集合为空的时候要抛异常
        if(coll == null || coll.size() == 0){
            throw new BusinessException(message);
        }
    }

    // 断言两个字符串相等
    public static void isEq(String str1,String str2,String message){
        if(!str1.equals(str2)){
            throw new BusinessException(message);
        }
    }

    //=========================错误码===============================


    // 断言字符串为空
    public static void isBlank(String str, ResponseCode code){
        // 当字符串不为空的时候要抛异常
        if(StrUtil.isNotBlank(str)){
            throw new BusinessException(code.getMessage(),code.getCode());
        }
    }

    // 断言字符串不为空
    public static void isNotBlank(String str,ResponseCode code){
        // 当字符串为空的时候要抛异常
        if(StrUtil.isBlank(str)){
            throw new BusinessException(code.getMessage(),code.getCode());
        }
    }

    // 断言对象为空
    public static void isNull(Object obj,ResponseCode code){
        // 当对象不为空的时候要抛异常
        if(obj != null){
            throw new BusinessException(code.getMessage(),code.getCode());
        }
    }

    // 断言对象不为空
    public static void isNotNull(Object obj,ResponseCode code){
        // 当对象为空的时候要抛异常
        if(obj == null){
            throw new BusinessException(code.getMessage(),code.getCode());
        }
    }

    // 断言集合为空
    public static void isNull(Collection coll, ResponseCode code){
        // 当集合不为空的时候要抛异常
        if(coll != null && coll.size() > 0){
            throw new BusinessException(code.getMessage(),code.getCode());
        }
    }

    // 断言集合不为空
    public static void isNotNull(Collection coll, ResponseCode code){
        // 当集合为空的时候要抛异常
        if(coll == null || coll.size() == 0){
            throw new BusinessException(code.getMessage(),code.getCode());
        }
    }

    // 断言两个字符串相等
    public static void isEq(String str1,String str2,ResponseCode code){
        if(!str1.equals(str2)){
            throw new BusinessException(code.getMessage(),code.getCode());
        }
    }

    /**
     * 断言字符串相同,不区分大小写
     * @param redisVerifyCode
     * @param inputVerifyCode
     * @param code
     */
    public static void isEqIgnoreCase(String redisVerifyCode, String inputVerifyCode,
                                      ResponseCode code) {
        if (!redisVerifyCode.equalsIgnoreCase(inputVerifyCode))
            throw new BusinessException(code.getMessage(),code.getCode());
    }
}
